package com.ruoyi.college.service.impl;

import java.util.List;

import com.ruoyi.college.mapper.FirstLevelSubjectMapper;
import com.ruoyi.college.mapper.ResearchDirectionMapper;
import com.ruoyi.college.mapper.SecondLevelSubjectMapper;
import com.ruoyi.system.service.impl.SysDeptServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.college.mapper.CollegeMapper;
import com.ruoyi.college.domain.College;
import com.ruoyi.college.service.ICollegeService;

/**
 * 学院信息管理Service业务层处理
 * 
 * @author chenxl
 * @date 2025-04-07
 */
@Service
public class CollegeServiceImpl implements ICollegeService 
{
    @Autowired
    private CollegeMapper collegeMapper;
    @Autowired
    private FirstLevelSubjectMapper firstLevelSubjectMapper;
    @Autowired
    private SecondLevelSubjectMapper secondLevelSubjectMapper;
    @Autowired
    private ResearchDirectionMapper researchDirectionMapper;
    @Autowired
    private SysDeptServiceImpl sysDeptService;

    /**
     * 查询学院信息管理
     * 
     * @param collegeId 学院信息管理主键
     * @return 学院信息管理
     */
    @Override
    public College selectCollegeByCollegeId(String collegeId)
    {
        return collegeMapper.selectCollegeByCollegeId(collegeId);
    }

    /**
     * 查询学院信息管理列表
     * 
     * @param college 学院信息管理
     * @return 学院信息管理
     */
    @Override
    public List<College> selectCollegeList(College college)
    {
        return collegeMapper.selectCollegeList(college);
    }

    /**
     * 新增学院信息管理
     * 
     * @param college 学院信息管理
     * @return 结果
     */
    @Override
    public int insertCollege(College college)
    {
        return collegeMapper.insertCollege(college);
    }

    /**
     * 修改学院信息管理
     * 
     * @param college 学院信息管理
     * @return 结果
     */
    @Override
    public int updateCollege(College college)
    {
        return collegeMapper.updateCollege(college);
    }

    /**
     * 批量删除学院信息管理
     * 
     * @param collegeIds 需要删除的学院信息管理主键
     * @return 结果
     */
    @Override
    public int deleteCollegeByCollegeIds(String[] collegeIds)
    {
        return collegeMapper.deleteCollegeByCollegeIds(collegeIds);
    }

    /**
     * 删除学院信息管理信息
     * 
     * @param collegeId 学院信息管理主键
     * @return 结果
     */
    @Override
    public int deleteCollegeByCollegeId(String collegeId)
    {
        return collegeMapper.deleteCollegeByCollegeId(collegeId);
    }


    /**
     * 查询学院信息管理
     *
     * @param collegeCode 学院代码
     * @return 学院信息管理
     */

    @Override
    public College selectCollegeByCollegeCode(String collegeCode){return collegeMapper.selectCollegeByCollegeCode(collegeCode);}


    // 根据学院代码、学科代码、研究方向代码查询对应的学院学科详细信息
    @Override
    public String selectCollegeByCollegeCodeAndSubjectCodeAndDirectionCode(
            String collegeCode, String subjectCode, String directionCode) {
        System.out.println("接收到的参数为："+collegeCode+subjectCode+directionCode);
        // 参数校验（确保参数有效性，避免后续处理异常）
        if (collegeCode == null || collegeCode.isEmpty() ||
                subjectCode == null || subjectCode.isEmpty() || subjectCode.length() < 6 ||
                directionCode == null || directionCode.isEmpty()) {
            return ""; // 或抛出参数异常：throw new IllegalArgumentException("参数不能为空且学科代码长度需至少6位");
        }

        // 1. 查询学院名称（假设collegeMapper的该方法直接返回学院名称字符串）
        String collegeName = collegeMapper.selectCollegeByCollegeCode(collegeCode).getCollegeName();
        collegeName = collegeName != null ? collegeName : "";

        // 2. 截取一级学科代码（前四位）并查询一级学科名称
        String firstSubjectCode = subjectCode.substring(0, 4);
        String firstSubjectName = firstLevelSubjectMapper
                .selectFirstLevelSubjectByCollegeCodeAndSubjectCode(collegeCode, firstSubjectCode);
        firstSubjectName = firstSubjectName != null ? firstSubjectName : "";

        // 3. 判断是否需要查询二级学科名称（根据学科代码后两位是否为"00"）
        String secondSubjectName = "";
        boolean isSecondLevel = !"00".equals(subjectCode.substring(4, 6));
        if (isSecondLevel) {
            // 调用二级学科查询mapper（注意方法名拼写与mapper保持一致：Fecond）
            secondSubjectName = secondLevelSubjectMapper
                    .selectFecondLevelSubjectByCollegeCodeAndSubjectCode(collegeCode, subjectCode);
            secondSubjectName = secondSubjectName != null ? secondSubjectName : "";
        }

        // 4. 查询研究方向名称（根据学科类型动态传入不同长度的学科代码）
        String directionQueryCode = isSecondLevel ? subjectCode : firstSubjectCode; // 二级传6位，一级传4位
        String directionName = researchDirectionMapper
                .selectResearchNameByCollegeIdAndSecondSubjectId(collegeCode, directionQueryCode, directionCode);
        directionName = directionName != null ? directionName : "";

        // 5. 拼接结果（按规则组合各部分名称）
        StringBuilder result = new StringBuilder();
        result.append(collegeName).append(" ");
        result.append(firstSubjectName).append(" ");

        // 二级学科才添加二级名称
        if (isSecondLevel) {
            result.append(secondSubjectName).append(" ");
        }

        // 添加研究方向名称
        result.append(directionName);

        return result.toString().trim(); // 去除首尾空格，避免空值导致的多余空格
    }
    //根据学院ID列表查询对应的学院信息列表
    @Override
    public List<College> selectCollegesByCollegeIds(List<String> collegeIds) {
        return collegeMapper.selectCollegesByCollegeIds(collegeIds);
    }

}
